﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Win.CSkin.Test.UserControlExt
{
    public partial class ipixButton : Button
    {
        public ipixButton()
        {
            depth = 5;
            colorTopLeft = Color.White;
            colorBottomRight = Color.DarkGray;
            colorInsideBorder = Color.DarkGray;
            colorOutsideBorder = Color.DarkGray;
            mouseDown = false;
            this.Paint += new System.Windows.Forms.PaintEventHandler(this.OnPaint);
            this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.OnMouseDown);
            this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.OnMouseUp);
            this.FlatStyle = System.Windows.Forms.FlatStyle.Standard;
        }

        private int depth;
        /// <summary>
        /// ボタンの3D深度（デフォルト=6）
        /// 按钮的3D深度(默认=6)
        /// </summary>
        public int ThreeDdepth
        {
            set { this.depth = value; }
            get { return this.depth; }
        }

        private Color colorTopLeft;
        private Color colorBottomRight;
        private Color colorOutsideBorder;
        private Color colorInsideBorder;
        /// <summary>
        /// 凸状態のボタン左と上のボーダー色 凸状态按钮左上边框颜色
        /// 右/下と対象の色ほど3D表現として見やすいはず 作为右/底和目标颜色的3D表示应该更容易看出
        /// </summary>
        public Color ColorTopLeftBorder
        {
            set { this.colorTopLeft = value; }
            get { return this.colorTopLeft; }
        }
        /// <summary>
        /// 凸状態のボタン右と下のボーダー色
        /// 上/左と対象の色ほど3D表現として見やすいはず
        /// </summary>
        public Color ColorBottomRightBorder
        {
            set { this.colorBottomRight = value; }
            get { return this.colorBottomRight; }
        }
        /// <summary>
        /// ボタン外枠の色 按钮外边框颜色
        /// ボタン設置面との境目の色を3D表現の上/左に合わせると見やすいはず。
        /// 您应该很容易看到是否调整按钮安装面和3D表示的顶部/左侧之间边界的颜色。
        /// </summary>
        public Color ColorOutsideBorder
        {
            set { this.colorOutsideBorder = value; }
            get { return this.colorOutsideBorder; }
        }
        /// <summary>
        /// ボタン内枠の色 按钮内框边框颜色
        /// 凸部分の境目の色を3D表現の上/左に合わせると見やすいはず。
        /// 将凸部边界的颜色调整到3D表示的顶部/左边应该是很容易的。
        /// </summary>
        public Color ColorInsideBorder
        {
            set { this.colorInsideBorder = value; }
            get { return this.colorInsideBorder; }
        }

        private bool mouseDown;
        private void OnMouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left)
                return;
            mouseDown = true;
            this.Refresh();
        }

        private void OnMouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left)
                return;
            mouseDown = false;
            this.Refresh();
        }

        private void OnPaint(object sender, PaintEventArgs e)
        {
            Pen MyPen = null;

            //上および左側のラインを引く（5ピクセル）
            //画线上方和左边(5像素)
            if (mouseDown)
                MyPen = new Pen(colorBottomRight, 1);
            else
                MyPen = new Pen(colorTopLeft, 1);
            for (int nCount = 0; nCount < depth; nCount++)
            {
                //上の線 上线
                e.Graphics.DrawLine(MyPen, 0, nCount, this.Width - nCount, nCount);
                //左の線 左线
                e.Graphics.DrawLine(MyPen, nCount, 0, nCount, this.Height - nCount);
            }

            //右および下側のラインを引く（5ピクセル）
            //画右边和底线(5像素)
            if (mouseDown)
                MyPen = new Pen(colorTopLeft, 1);
            else
                MyPen = new Pen(colorBottomRight, 1);
            for (int nCount = 0; nCount < depth; nCount++)
            {
                //下の線 底线
                e.Graphics.DrawLine(MyPen, nCount, this.Height - nCount, this.Width, this.Height - nCount);
                //右の線 右线
                e.Graphics.DrawLine(MyPen, this.Width - nCount, nCount, this.Width - nCount, this.Height);
            }

            //ボタン内枠 按钮内框
            MyPen = new Pen(colorInsideBorder, 1);
            e.Graphics.DrawRectangle(MyPen, depth, depth, this.Width - depth * 2, this.Height - depth * 2);

            //ボタン外枠 按钮外框
            MyPen = new Pen(colorOutsideBorder, 1);
            e.Graphics.DrawRectangle(MyPen, 0, 0, this.Width - 1, this.Height - 1);
        }
    }
}
